home *** CD-ROM | disk | FTP | other *** search
/ Aminet 24 / Aminet 24 (1998)(GTI - Schatztruhe)[!][Apr 1998].iso / Aminet / dev / c / chunky.lha / lib_chunky / lib-src / chunky.h < prev    next >
C/C++ Source or Header  |  1998-02-26  |  6KB  |  143 lines

  1. #ifndef _CHK_DRAW_H
  2. #define _CHK_DRAW_H
  3. #ifndef _EXEC_MEMORY_H
  4. #include  <exec/memory.h>
  5. #endif
  6. #ifndef _GRAPHICS_GFX_H
  7. #include  <graphics/gfx.h>
  8. #endif
  9. #ifndef _GRAPHICS_TEXT_H
  10. #include  <graphics/text.h>
  11. #endif
  12. #ifndef _GRAPHICS_RASTPORT_H
  13. #include  <graphics/rastport.h>
  14. #endif
  15.  
  16. struct  ChunkyPort
  17. {
  18. // Raw Chunky data
  19.     UBYTE             *cp_Chunky; // Chunky buffer of this ChunkyPort
  20.     UWORD             cp_Width,   // width/Height specification of this
  21.                                         cp_Height;  // ChunkyPort
  22.     UWORD             cp_cx,      // current position of the
  23.                                         cp_cy;      // draw pen
  24.     UBYTE             cp_APen;    // current pen
  25.     UBYTE             cp_OPen;    // area outline pen
  26.     UBYTE             cp_BPen;    // background pen for inversvid
  27.     UBYTE             cp_IPen;    // image-pen: mostly used as half shine/shadow pen
  28.     UWORD             cp_Flags;   // use those flags defined in graphics/rastport.h
  29.  
  30. // structure-entries for Text
  31.     struct TextFont   *cp_Font;       // pointer to the system font
  32.     UBYTE             *cp_TxtChunky;  // pointer to a bitmap used for text rendering
  33.     UWORD             cp_TxHeight;    // Height of the text
  34.     UWORD             cp_TxBaseline;  // Baseline of the text
  35.     UWORD             cp_TxStyle;     // Those old Softstyle and the new ones see below
  36. };
  37.  
  38. /* New Softstyles, for all fonts */
  39. #define FSB_OUTLINE   8     // use bpen to draw dark outline and jam1 apen
  40. #define FSF_OUTLINE   1<<8
  41. #define FSB_3D        9     // use bpen as dark shadowed pen and
  42. #define FSF_3D        1<<9  // apen as the light one
  43. #define FSB_WIDE3D    10    // like FSB_3D but it's 4pix changed
  44. #define FSF_WIDE3D    1<<10
  45. #define FSB_EMBOSSED  11    // use bpen as dark upper left pen
  46. #define FSF_EMBOSSED  1<<11 // then open +1/+1 and finally apen +1/+1
  47.  
  48. /*
  49. ** To use these functions, you have to assemble the sources (p2c.s|c2p.s) and
  50. ** then use hunk2gcc
  51. */
  52. struct  p2cStruct
  53. {
  54.     struct  BitMap  *bmap;
  55.     UWORD           startx,
  56.                                     starty,
  57.                                     width,
  58.                                     height;
  59.     UBYTE           *ChunkyBuffer;
  60. };
  61.  
  62. struct  c2pStruct
  63. {
  64.     struct  BitMap  *bmap;
  65.     UWORD           startx,
  66.                                     starty,
  67.                                     width,
  68.                                     height;
  69.     UBYTE           *ChunkyBuffer;
  70. };
  71.  
  72. /*
  73. ** Here are the prototypes for the both asm-functions
  74. */
  75. void ChunkyToPlanarAsm( struct c2pStruct * );
  76. void PlanarToChunkyAsm( struct p2cStruct * );
  77. #define ChunkyToPlanar( c2p )                       \
  78. ({                                                  \
  79.     struct c2pStruct  *str = c2p;                           \
  80.     {                                                 \
  81.         register  struct c2pStruct  *str __asm("a0") = c2p;   \
  82.         __asm volatile ("jbsr _ChunkyToPlanarAsm"       \
  83.         : /* no output */                               \
  84.         : "r"(str)                                       \
  85.         : "d0", "d1", "a0", "a1", "fp0", "fp1", "cc", "memory");  \
  86.     }                                                           \
  87. })
  88. #define PlanarToChunky( p2c )   \
  89. ({                                 \
  90.     struct  p2cStruct *str = p2c;   \
  91.     {                                             \
  92.         register  struct p2cStruct  *str __asm("a0") = p2c; \
  93.         __asm volatile ("jbsr _PlanarToChunkyAsm" \
  94.         : /* no output */   \
  95.         : "r"(str)          \
  96.         : "d0", "d1", "a0", "a1", "fp0", "fp1", "cc", "memory"); \
  97.     } \
  98. })
  99.  
  100.  
  101. #define MAX(a,b)  (((a)>(b)) ? (a) : (b) )
  102. #define MIN(a,b)  (((a)<(b)) ? (a) : (b) )
  103.  
  104. #define SET_BYTE( cp, p, x, y ) \
  105.     *((UBYTE *)((ULONG )cp->cp_Chunky ) + ((cp->cp_Width * (y) )+(x) )) = (p)
  106.  
  107. #define GET_BYTE( cp, x, y ) \
  108.     *((UBYTE *)((ULONG )cp->cp_Chunky ) + ((cp->cp_Width * (y))+(x) ) )
  109.  
  110. // general purpose routines
  111. extern struct ChunkyPort *InitChunkyPort( UWORD, UWORD );
  112. extern void   FreeChunkyPort( struct ChunkyPort * );
  113. extern void   DrawChunkyPort( struct ChunkyPort *, struct RastPort *, UWORD, UWORD );
  114. extern void   DrawChunkyArea( struct ChunkyPort *, struct RastPort *, UWORD, UWORD, UWORD, UWORD );
  115. extern void   InsertChunkyPort( struct ChunkyPort *, struct RastPort *, UWORD, UWORD );
  116. extern struct ChunkyPort *CreateChunkyFromRastPort( struct RastPort *, UWORD, UWORD, UWORD, UWORD );
  117. extern struct ChunkyPort *CreateChunkyFromBitMap( struct BitMap *, UWORD, UWORD, UWORD, UWORD );
  118. extern void   SetAPenChk( struct ChunkyPort *, UBYTE );
  119. extern void   SetOPenChk( struct ChunkyPort *, UBYTE );
  120. extern void   SetBPenChk( struct ChunkyPort *, UBYTE );
  121. extern void   SetABOPenChk( struct ChunkyPort *, UBYTE, UBYTE, UBYTE );
  122. extern void   SetDrMdChk( struct ChunkyPort *, UWORD );
  123. extern void   MoveChk( struct ChunkyPort *, UWORD, UWORD );
  124. extern void   DrawChk( struct ChunkyPort *, UWORD, UWORD );
  125. extern void   SetChkByte( struct ChunkyPort *, UBYTE, UWORD, UWORD );
  126. extern UBYTE  GetChkByte( struct ChunkyPort *, UWORD, UWORD );
  127. extern void   LineChk( struct ChunkyPort *, UWORD, UWORD, UWORD, UWORD );
  128. extern void   RectChk( struct ChunkyPort *, UWORD, UWORD, UWORD, UWORD );
  129. extern void   RectFillChk( struct ChunkyPort *, UWORD, UWORD, UWORD, UWORD );
  130. extern void   SetChunky( struct ChunkyPort *, UBYTE );
  131. extern void   ClearChunky( struct ChunkyPort * );
  132.  
  133. // general text routines
  134. extern void  SetFontChk( struct ChunkyPort *, struct TextFont * );
  135. extern long  TextLengthChk( struct ChunkyPort *, char *, int );
  136. extern void  TextLChk( struct ChunkyPort *, char *, int );
  137. extern void  TextChk( struct ChunkyPort *, char * );
  138. extern void  TextCenterChk( struct ChunkyPort *, char *, UWORD );
  139. extern void  TextFChk( struct ChunkyPort *, char *, ... );
  140. extern ULONG SetSoftStyleChk( struct ChunkyPort *, ULONG );
  141.  
  142. #endif
  143.